#!/bin/bash

###############################################
# 自动网络分流配置脚本
# 名称：auto_net_config.sh
# 版本：1.0
# 作者：YourName
# 日期：2025-03-22
# 描述：
#   本脚本用于在多网卡环境下配置网络流量分流。
#   允许用户选择连接互联网和局域网的网卡，
#   并通过策略路由实现流量分流。
# 特性：
#   1. 自动获取所有网络接口
#   2. 提供交互式选择网卡
#   3. 自动配置互联网和局域网路由
#   4. 临时配置，重启后恢复默认设置
#   5. 友好的人机交互与丰富的日志输出
###############################################

# 显示标题信息
show_title() {
    echo "=============================="
    echo " 自动网络分流配置脚本 "
    echo "=============================="
}

# 获取所有网络接口
get_all_interfaces() {
    ip link show | awk -F: '/^[0-9]+: [^lo]/ {print $2}' | tr -d ' '
}

# 列出网络接口并让用户选择
select_interface() {
    local iface_type=$1
    echo "\n可用网络接口："
    interfaces=($(get_all_interfaces))
    for i in "${!interfaces[@]}"; do
        echo "$((i+1)). ${interfaces[$i]}"
    done
    read -p "请选择要连接到${iface_type}的网卡编号: " choice
    if [[ $choice -gt 0 && $choice -le ${#interfaces[@]} ]]; then
        echo "${interfaces[$((choice-1))]}"
    else
        echo "选择无效，请重新运行脚本。"
        exit 1
    fi
}

# 配置路由规则
configure_routing() {
    local iface=$1
    local table_id=$2
    local metric=$3
    local ip_addr
    local gateway

    # 获取IP地址和网关
    ip_addr=$(ip -4 addr show "$iface" |
        grep -oP '(?<=inet\s)\d+(\.\d+){3}')
    gateway=$(ip route show dev "$iface" |
        grep -oP '(?<=default via )\d+(\.\d+){3}')

    # 检查IP和网关有效性
    if [[ -n $ip_addr && -n $gateway ]]; then
        echo "配置路由：$iface (IP: $ip_addr, 网关: $gateway)"
        sudo ip route add default via "$gateway" dev "$iface" \
            table "$table_id" metric "$metric"
        sudo ip rule add from "$ip_addr" table "$table_id"
    else
        echo "无法获取$iface的IP或网关，请检查网络配置。"
        exit 1
    fi
}

# 主程序
show_title
internet_iface=$(select_interface "互联网")
lan_iface=$(select_interface "局域网")

# 配置互联网和局域网路由
configure_routing "$internet_iface" 200 100
configure_routing "$lan_iface" 201 200

# 配置默认路由
default_gateway=$(ip route show dev "$internet_iface" |
    grep -oP '(?<=default via )\d+(\.\d+){3}')
sudo ip route add default via "$default_gateway" dev "$internet_iface"

echo -e "\n网络分流配置完成！"
